/**
 * 商品模块
 */
const fs = require('fs');
const { getUniqueId } = require('../utils/time');
const { isRequire } = require('../utils/common');
const { paginateArray, PAGE_SIZE } = require('../utils/page');

// 购物车对象
const productTemplate = {
    userId: '', // 用户id,关联购物车
    products: [
        {
            productId: '', // 商品id
            productName: '', // 商品名
            productPrice: '', // 商品价格
            productImage: '', // 商品图片
            productType: '', // 商品类型
            num:2, // 已选数量
            productNum: 999, // 商品库存
            createTime: '', // 商品创建时间
            updateTime: '', // 商品更新时间
        }
    ]

}

// 商品数据文件地址
const filePath = './data/shopCart.txt';

// 商品对象必填字段
const requireKeys = {
    "productId": "商品id",
    "productName": "商品名称",  
    "productPrice": "商品价格", 
    "productImage": "商品图片",
    "productType": "商品类型", 
    "num":2, // 已选数量
    "productNum": "商品库存",
}

/**
 * 查询所有购物车数据并返回
 * @returns 
 */
async function readShopCart() {
    try {
        const res = await fs.readFileSync(filePath, 'utf-8');
        const data = res.toString();
        // 判断是否有数据
        if (data) {
            const arr = JSON.parse(data);
            return Promise.resolve(arr);
        } else {
            return Promise.resolve([]);
        }
    } catch (error) {
        // 判断是否文件不存在
        if (String(error).indexOf('no such file or directory') !== -1) {
            return Promise.resolve([]);
        }
        return Promise.reject(error);
    }
}

/**
 * 添加和编辑购物车
 * @param {*} content 购物车信息
 * @returns 
 */
async function addShopCart(content) {
    try {
        const { userId, products } = content;
        // 遍历判断是否必填
        let flag = true;
        products.forEach(item => {
            if(!flag){
                return;
            }
            flag = isRequire(requireKeys, item);
        });
        if(!flag){
            return Promise.reject('必填项不完整');
        }
        const res = await readShopCart();
        const index = res.findIndex((item) => item.userId === userId);
        // 判断购物车信息已存在，更新；否则添加
        if (index > -1) {
            res[index].products = products;
        }else{
            res.unshift(content);
        }
        const data = JSON.stringify(res)
        await fs.writeFileSync(filePath, data);
        return Promise.resolve();
    } catch (error) {
        console.log(error);
        return Promise.reject();
    }
}

/**
 * 根据用户id查询购物车数据并返回
 * @param {*} id 
 */
async function getShopCartDetail(userId) {
    try {
        const res = await readShopCart();
        const data = JSON.parse(JSON.stringify(res));
        const item = data.find((item) => userId === item.userId);
        return Promise.resolve(item ? item : null);
    } catch (error) {
        console.log(error);
        return Promise.reject();
    }
}

module.exports = { 
    productTemplate, 
    readShopCart,
    addShopCart,
    getShopCartDetail
}
